const app = getApp();

// 安全存储封装
const SecureStorage = {
  set(key, value) {
    try {
      // 条件编译：App端使用安全存储
      // #ifdef APP-PLUS
      /* const encrypted = plus.android.invoke('your.encryption.method', value);
      plus.storage.setItem(key, encrypted); */
	  uni.setStorageSync(key, JSON.stringify(value));
      // #endif
      
      // 非App端使用普通存储
      // #ifndef APP-PLUS
      uni.setStorageSync(key, JSON.stringify(value));
      // #endif
    } catch (e) {
      console.error('SecureStorage set error:', e);
    }
  },
  
  get(key) {
    try {
      // #ifdef APP-PLUS
      /* const encrypted = plus.storage.getItem(key);
      return plus.android.invoke('your.decryption.method', encrypted); */
	  const value = uni.getStorageSync(key);
	  return value ? JSON.parse(value) : null;
      // #endif
      
      // #ifndef APP-PLUS
      const value = uni.getStorageSync(key);
      return value ? JSON.parse(value) : null;
      // #endif
    } catch (e) {
      console.error('SecureStorage get error:', e);
      return null;
    }
  },
  
  remove(key) {
    // #ifdef APP-PLUS
    /* plus.storage.removeItem(key); */
	uni.removeStorageSync(key);
    // #endif
    // #ifndef APP-PLUS
    uni.removeStorageSync(key);
    // #endif
  }
};

// Token 管理器
const TokenManager = {
  // 获取当前token
  getToken() {
    const tokenData = SecureStorage.get('token');
     return tokenData?.accessToken ? `${tokenData.accessToken}` : '';
	//return tokenData?.accessToken ? `9cc0f454-356c-43d1-af57-7cce1d9f68e2` : '';//测试
  },

  // 检查token是否有效
  isValid() {
    const tokenData = SecureStorage.get('token');
    if (!tokenData) return false;
    
    // 检查过期时间
    if (tokenData.expiresAt && tokenData.expiresAt < Date.now()) {
      return false;
    }
    return !!tokenData.accessToken;
  },

  // 保存token数据
  save(tokenResponse) {
    if (!tokenResponse?.accessToken) return;
    
    // 计算过期时间（提前5分钟过期）
    const expiresIn = tokenResponse.expiresIn || 7200; // 默认2小时
    const expiresAt = Date.now() + (expiresIn - 300) * 1000;
    
    const tokenData = {
      accessToken: tokenResponse.accessToken,
      refreshToken: tokenResponse.refreshToken,
      expiresAt,
      userInfo: tokenResponse.userInfo || {}
    };
    
    // 处理头像URL
    if (tokenData.userInfo.headImg && !tokenData.userInfo.headImg.startsWith('http')) {
      tokenData.userInfo.headImg = app.globalData.apiUrl + tokenData.userInfo.headImg;
    }
    
    SecureStorage.set('token', tokenData);
  },

  // 获取用户信息
  getUserInfo() {
    const tokenData = SecureStorage.get('token');
    return tokenData?.userInfo || {};
  },

  // 刷新token
  async refresh() {
    const tokenData = SecureStorage.get('token');
    if (!tokenData?.refreshToken) return false;
    
    try {
      const response = await uni.request({
        url: `${app.globalData.apiUrl}/auth/refresh`,
        method: 'POST',
        header: { 'content-type': 'application/json' },
        data: { refreshToken: tokenData.refreshToken }
      });
      
      if (response.statusCode === 200 && response.data.accessToken) {
        this.save(response.data);
        return true;
      }
    } catch (e) {
      console.error('Token refresh failed:', e);
    }
    
    // 刷新失败清除token
    this.clear();
    return false;
  },

  // 清除token
  clear() {
    SecureStorage.remove('token');
  }
};

// 登录跳转
const toLogin = () => {
  uni.showModal({
    title: '登录已过期',
    content: '请重新登录',
    confirmText: '去登录',
    success: (res) => {
      if (res.confirm) {
		TokenManager.clear();
        uni.navigateTo({ url: "/pages/Login/index" });
      }
    }
  });
};

export default {
  ...TokenManager,
  toLogin
};